package com.endurance.strategy.context;

import com.endurance.mapper.PayMapper;
import com.endurance.pojo.PaymentChannelEntity;
import com.endurance.strategy.factory.StrategyFactory;
import com.endurance.strategy.PayStrategy;
import com.endurance.utils.SpringUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @Author: sunlin
 * @Date: 2024-05-04 12:35
 * @Version: 1.0
 * @Description: 通过上下文去获取策略
 */
@Component
public class PayContextStrategy {

    @Autowired
    private PayMapper payMapper;

    /**
     * 使用自定义的工厂类
     * @param payCode
     * @return
     */
/*    public String toPayHtml(String payCode) {
        if(StringUtils.isEmpty(payCode)) {
            return "payCode不能为空！";
        }
        // 1. 使用策略工厂获取具体的策略实现
        PayStrategy payStrategy = StrategyFactory.getPayStrategy(payCode);
        if (payStrategy == null) {
            return "没有找到具体的策略实现...";
        }
        return payStrategy.toPay();
     }*/


    /**
     * 结合Spring，简化以上方法
     *
     * @param payCode
     * @return
     */
    public String toPayHtml(String payCode) {
        if (StringUtils.isEmpty(payCode)) {
            return "payCode不能为空！";
        }
        PaymentChannelEntity paymentChannelEntity = payMapper.selectById(payCode);

        if (paymentChannelEntity == null) {
            return "没有查询到具体的支付方式";
        }

        String strategyBeanId = paymentChannelEntity.getStrategyBeanId();
        if (StringUtils.isEmpty(strategyBeanId)) {
            return "数据库中没有配置strategyBeanId";
        }

        PayStrategy payStrategy = SpringUtils.getBean(strategyBeanId, PayStrategy.class);
        return payStrategy.toPay();
    }

}
